如果要更新pip所安裝的全部套件,可以使用下列程式碼:
pip_upgrade_all.py程式碼
"""
程式名稱:pip_upgrade_all.py
"""
import ctypes
import os
import sys
import subprocess
"""
!!!不適用的方式!!!
pkg_resources在python 3.12後已不再支援,
在3.11後期版本會顯示:
1: DeprecationWarning: pkg_resources is deprecated as an API.
See https://setuptools.pypa.io/en/latest/pkg_resources.html
"""
def is_admin() -> bool:
return ctypes.windll.shell32.IsUserAnAdmin()
if is_admin():
installed_packages_text = subprocess.check_output(['pip', 'freeze'], universal_newlines=True)
installed_packages = [line.split('==')[0] for line in installed_packages_text.split('\n') if line.strip()]
subprocess.call("pip install --upgrade " + ' '.join(installed_packages), shell=True)
else:
print('需運作在系統管理員模式中')
說明:
1.之前是使用pkg_resources函式庫處理,不過在之後版本已經不支援。
2.操作在系統管理員模式下主要是讓安裝的套件能安裝在python目錄本身的site-package中。
3.網站找很多方式,但多太複雜。故使用最原始的pip freeze指令,但缺點是執行時似乎有2~3秒的等待時間。不過程式自動化嘛~讓它跑就是了。
4.此程式的想法是,原pkg_resources輸出什麼,用installed_packages = ...
替代產生相同輸出。